home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
amok_lha
/
amok22.lha
/
MakeKickRes
/
MakeKickRes.dok
< prev
next >
Wrap
Text File
|
1993-08-15
|
4KB
|
87 lines
MAKEKICKRES -- CHAIN YOUR PROGRAMS TO EXEC
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
von Holger Gzella
Freischöffenweg 12
4600 Dortmund 16
(0231) 85 16 02
Das Programm MakeKickRes ist eigentlich nur ein Demoprogramm zum Text
"ResetFest.dok", denn ein Programm sagt bekanntlich mehr als tausend
Textfiles. Zu beachten ist, wenn man das Programm neu kompilieren will:
es läuft leider nicht mit dem Standard-Exec-Definitionsmodul des M2Amiga-
Compilers v3.2d. Dieses ist nämlich an mindestens zwei Stellen fehler-
haft. Ich habe eine gepatchte Version (als .sym und .def) beigefügt,
die man dann in sein Modul-Verzeichnis kopieren sollte. Die zwei Fehler sin:
1. execBase^.kickCheckSum ist als ADDRESS definiert. Das ist so
falsch, da dort kein Zeiger auf die KickResident-Checksumme
steht, sondern die Checksumme selbst. Ich habe dies auf LONG-
INT geändert, der zwar kompatibel, aber halt doch die dersel-
be ist. Mit dieser Definition läuft alles glatt.
2. SumKickData(); ist parameterlos definiert. In Wahrheit aber
wird die Checksumme in D0 übergeben, und der Programmierer
muß sie selbst eintragen. Also habe ich einen Rückgabewert
vom Typ LONGINT definiert, der dann prima ins neue kickCheckSum-
Feld paßt.
3. (Dies habe ich, Fridtjof, hinzugefügt) Die Prozeduren AddIntServer
und RemIntServer haben seit M2Amiga 3.2 als Typ für den ersten
Parameter Hardware.IntFlags, was vom Compiler als ein Byte-Wert
übersetzt wird. Dies führt zu übelsten Abstürzen, da es ein Wort
sein müßte. Daher hab' ich es durch INTEGER ersetzt.
Zum Programm selbst: MakeKickRes kann man sowohl vom CLI/SHELL als auch
von der Workbench starten. Es erscheint dann ein kleines Fenster mit
vier Gadgets. Das oberste, ein String-Gadget, ist dazu da, um den Namen
des Programms, das resetfest gemacht werden soll, einzutragen.
Das zweite Gadget, "INFO", gibt Auskunft über das Programm.
Das dritte Gadget, "INSTALL IT", installiert das im ersten Gadget ange-
gebene Programm resetfest über KickMemPtr und KickTagPtr. Es muß sich
dabei entweder um ein Object-File ("LINKABLE"-Schalter im DevPac), also
ein assembliertes, aber nicht gelinktes und unausführbares Programm, oder
um ganz normalen, ausführbaren Code ("AUSFÜHRBAR"-Schalter im DevPac; bei
Profimat automatisch) handeln. Wichtig ist nur, daß PC-relativ assem-
bliert wird, da man ja nicht weiß, wo das Programm hinkommt. Theoretisch
wäre es möglich, das Programm in den freien RAM-Bereich bei $50000 zu
legen, aber der wird schon von vielen Programmen (z.B. Observer) genutzt.
Mit dem vierten Gadget, das mit "EXIT" bezeichnet ist, verläßt man das
Programm.
Das war's, viel Spaß noch,
Holger
PS: (von Fridtjof)
Ich halte es nicht für Empfehlenswert, eine verändertes Exec.def zu
benutzen, da dies zu Inkompatibilitäten beim Compiliren von Programmen
mit dem Original Exec führen kann. Daher sollte es den M2Amiga
herstellern vorbehalten bleiben, fehlerfreie Module herauszugeben, die
dann alle benutzen. Die Fehler oben können folgendermaßen umgangen
werden:
1. ADDRESS und LONGINT sind kompatible (s.o.) ==> Null Problemo
2. Das Ergebnis der Prozedur kann direkt nach ihrem Aufruf mit
SYSTEM.REG(0) ausgelesen werden
3. Vor dem Aufruf von Add/RemIntSever kann D0 mit SYSTEM.SETREG(0,0)
auf 0 gesetzt werden. Wird nun der Byte-Wert des Interrupttyps in
D0 geschrieben, so ist er automatisch auch als Wort korrekt.
Vielen Dank an Stefan Salewski für die Beschreibung des Fehlers # 3.
--- Fridtjof